package it.gat.dao.impl;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import it.gat.dao.ClienteDAO;
import it.gat.dao.ContrattoDAO;
import it.gat.model.Contratto;
import it.gat.util.dao.MySQLDAOFactory;

public class MySQLContrattoDAOImpl implements ContrattoDAO {

	@Override
	public void insert(Contratto contratto,int idCliente) throws SQLException {
		Connection conn = MySQLDAOFactory.createConnection(); 
		Statement stmt = conn.createStatement();
		String strDataInizio = new SimpleDateFormat("yyyy-MM-dd").format(contratto.getDataInizio());
		String strDataFine = new SimpleDateFormat("yyyy-MM-dd").format(contratto.getDataFine());
		String query = "INSERT INTO Contratto " +
		               "(dataInizio,dataFine,orePreviste,oreUsufruite,idCliente) " +
		               "VALUES " +
		               "('"+strDataInizio+"',"+
		               "'"+strDataFine+"',"+
		               ""+contratto.getOrePreviste()+","+
		               ""+contratto.getOreUsufruite()+","+
		               ""+idCliente+")";
		stmt.executeUpdate(query);
		query = "SELECT LAST_INSERT_ID()";
		ResultSet rs = stmt.executeQuery(query);
		while (rs.next()) {
			contratto.setIdContratto(rs.getInt("LAST_INSERT_ID()"));
		}
		
	}

	@Override
	public Contratto retriveById(int id) throws SQLException {
		Contratto contratto = new Contratto();
		Connection conn = MySQLDAOFactory.createConnection(); 
		Statement stmt = conn.createStatement();
		String query = "SELECT * " +
		               "FROM Contratto " + 
		               "WHERE IdContratto = " + id;
		ResultSet rs = stmt.executeQuery(query);
		while (rs.next()) {
			contratto.setIdContratto(id);
			contratto.setDataInizio(rs.getDate("dataInizio"));
			contratto.setDataFine(rs.getDate("dataFine"));
			contratto.setOrePreviste(rs.getInt("orePreviste"));
			contratto.setOreUsufruite(rs.getInt("oreUsufruite"));
			ClienteDAO clienteDAO = new MySQLClienteDAOImpl();
			contratto.setCliente(clienteDAO.retriveById(rs.getInt("idCliente")));
			}
		return contratto;
	}

	@Override
	public List<Contratto> retrieveAll() throws SQLException {
		List<Contratto> contratti = new ArrayList<Contratto>();
		Connection conn = MySQLDAOFactory.createConnection(); 
		Statement stmt = conn.createStatement();
		String query = "SELECT * " +
		               "FROM Contratto ";
		ResultSet rs = stmt.executeQuery(query);
		while (rs.next()) {
			Contratto contratto = new Contratto();
			contratto.setIdContratto(rs.getInt("idcontratto"));
			contratto.setDataInizio(rs.getDate("dataInizio"));
			contratto.setDataFine(rs.getDate("dataFine"));
			contratto.setOrePreviste(rs.getInt("orePreviste"));
			contratto.setOreUsufruite(rs.getInt("oreUsufruite"));
			ClienteDAO clienteDAO = new MySQLClienteDAOImpl();
			contratto.setCliente(clienteDAO.retriveById(rs.getInt("idCliente")));
			contratti.add(contratto);
			}
		return contratti;
	}
	
	@Override
	public List<Contratto> retrieveByIdCliente(int idcliente) throws SQLException {
		List<Contratto> contratti = new ArrayList<Contratto>();
		Connection conn = MySQLDAOFactory.createConnection(); 
		Statement stmt = conn.createStatement();
		String query = "SELECT * " +
		               "FROM Contratto " +
				       "WHERE IdCliente=" + idcliente;
		ResultSet rs = stmt.executeQuery(query);
		while (rs.next()) {
			Contratto contratto = new Contratto();
			contratto.setIdContratto(rs.getInt("idcontratto"));
			contratto.setDataInizio(rs.getDate("dataInizio"));
			contratto.setDataFine(rs.getDate("dataFine"));
			contratto.setOrePreviste(rs.getInt("orePreviste"));
			contratto.setOreUsufruite(rs.getInt("oreUsufruite"));
			ClienteDAO clienteDAO = new MySQLClienteDAOImpl();
			contratto.setCliente(clienteDAO.retriveById(rs.getInt("idCliente")));
			contratti.add(contratto);
			}
		return contratti;
	}

	@Override
	public void update(Contratto contratto) throws SQLException {
		Connection conn = MySQLDAOFactory.createConnection(); 
		Statement stmt = conn.createStatement();
		String strDataInizio = new SimpleDateFormat("yyyy-MM-dd").format(contratto.getDataInizio());
		String strDataFine = new SimpleDateFormat("yyyy-MM-dd").format(contratto.getDataFine());
		String query = "UPDATE Contratto " +
		               "SET dataInizio='"+strDataInizio+"', "+
		               "    dataFine='"+strDataFine+"', "+
		               "    orePreviste="+contratto.getOrePreviste()+","+
		               "    oreUsufruite="+contratto.getOreUsufruite()+","+
		               "    idCliente="+contratto.getCliente().getIdCliente()+" "+
		               "WHERE idContratto=" + contratto.getIdContratto();
		stmt.executeUpdate(query);

	}

	@Override
	public void delete(int idContratto) throws SQLException {
		Connection conn = MySQLDAOFactory.createConnection(); 
		Statement stmt = conn.createStatement();
		String query = "DELETE FROM Contratto " +
		               "WHERE idContratto=" + Integer.toString(idContratto);
		stmt.executeUpdate(query);

	}

}
